<?php
class DocumentoVentasController extends AppController {

    var $name = 'DocumentoVentas';
    var $appModule = 'Facturacion';
    var $helpers = array('Html', 'Form', 'Javascript', 'Number', 'Time', 'Codigo','GetList','AdcReporter');
    var $components = array('RequestHandler', 'Formating');
    var $uses = array('DocumentoVenta');
    
    function index() {
        $conditions['DocumentoVenta.activo']                = true;
        $conditions['DocumentoVenta.codigo_documento_id']   = 103;
        $conditions['DocumentoVenta.empresa_id']            = $this->empresaId();
        $conditions['DocumentoVenta.centro_dist_id']        = $this->centroDistId();
        //verificando si se hizo busqueda por formulario
        if(!empty($this->data['DocumentoVenta']['busqueda'])){
            $q = str_replace(';','|', $this->data['DocumentoVenta']['busqueda']);        
        } 
        else if(!empty($this->params['url']['q'])){
            $q = str_replace(';','|', $this->params['url']['q']);
        } 
        else if(!empty($q)){
                $q = str_replace(';','|',$q);
        } else {
            $q = '';
        }
        // end usuario
        //armando condiciones si q tiene valor
        if(!empty($q)){
            $conditions['OR'] = array(
                    'DocumentoVenta.numero_documento'=> explode('|',$q),                    
                    'DocumentoVenta.numero_control SIMILAR TO' => "%$q%",
                    'DocumentoVenta.nombre_cliente SIMILAR TO' => "%$q%",
                    'DocumentoVenta.observaciones SIMILAR TO' => "%$q%" );
        }
        $this->paginate['DocumentoVenta'] = array(
                        'limit'=>$this->limite,
                        'order'=>array('DocumentoVenta.numero_documento'=>'desc'),
                        'fields'=>array(
                            'DocumentoVenta.id',
                            'DocumentoVenta.anulado',
                            'DocumentoVenta.impreso',
                            'DocumentoVenta.numero_control',
                            'DocumentoVenta.numero_documento',
                            'DocumentoVenta.nombre_cliente',
                            'DocumentoVenta.alumno_id',
                            'DocumentoVenta.direccion_cliente',
                            'DocumentoVenta.observaciones',
                            'DocumentoVenta.suma_importe_total',
                            'DocumentoVenta.fecha_emision',
                            'DocumentoVenta.fecha_pago',
                            'DocumentoVenta.usuario_creacion_id'),
                        'conditions'=>$conditions,                        
                        'contain' => array(
                            'Alumno'=>array('fields'=>array(
                                'Alumno.id',
                                'Alumno.codigo'),
                                'conditions'=>array('Alumno.activo'=>true))                                   
                         )
                );
        $data = $this->paginate('DocumentoVenta');
        //estableciendo valores para vista
        if(!empty($this->params['url']['limite'])){
            $this->limite = $this->params['url']['limite'];
        }
        $this->data['DocumentoVenta']['pagesize'] = $this->paginate['limite'] = $this->limite;
        $this->data['DocumentoVenta']['busqueda'] = str_replace('|',';',$q);        
        $this->set('data',$data);
        $this->set('limite',$this->limite);
    }
    
        //opcion no funcional 
    public function anular($id = null,$bahivor = true) { 
        if (!$id) {
            if($bahivor){
                    $this->Session->setFlash(__('Invalido Identificador para Documento de compra ', true));
                    $this->redirect(array('action'=>'index'));
            } else {
                    return false;	
            }
        }
        $this->DocumentoVenta->Behaviors->attach('Containable');
        $dato2 = $this->DocumentoVenta->find('first', 
                                                array(
                                                    'conditions'=>array(
                                                            'DocumentoVenta.id'=>$id,
                                                            'DocumentoVenta.activo'=>true,
                                                            'DocumentoVenta.anulado'=>false)));
        if(empty($dato2)){
            $this->Session->setFlash(__('Advertencia: la operación no se puede realzar porque ya fue anulado o eliminado', true));
            return false;
        }        
        $dato2['DocumentoVenta']['usuario_anulacion_id'] = $this->_usuario['id'];
        $dato2['DocumentoVenta']['fecha_anulacion'] = 'now()';
        $dato2['DocumentoVenta']['anulado'] = true;
        $this->loadModel('CuentaCorrienteCobrar');
        $this->CuentaCorrienteCobrar->deleteCc($dato2['DocumentoVenta']['id'], 103);
        $result = $this->DocumentoVenta->save($dato2);       
        if($result){            
            $this->Session->setFlash(__('Documento de venta fue anulado', true));
            if($bahivor){                
                $this->redirect(array('action'=>'index'));
            } else {				
                return true;
            }
        } else {
            $this->Session->setFlash(__('Documento de venta no fue anulado', true));
            if($bahivor){                
               $this->redirect(array('action'=>'index'));
            } else {
                return false;
            }
        }
    }

    public function process(){
        $this->usuario = $this->Session->read('Usuario');
        $result = true;
        $this->DocumentoVenta->begin();
        foreach($this->data as $dato){
            if($dato['id']!='0'){
                if(isset($this->params['form']['cancel'])){
                    $result = $result && $this->anular($dato['DocumentoVenta']['id'],false);
                }
            }
        }
        if($result){
            $this->DocumentoVenta->commit();                
            $this->redirect(array('action'=>'index'),null,true);
        } else {
            $this->DocumentoVenta->rollback();                
            $this->redirect(array('action'=>'index'),null,true);
        }
    } 
    
    public function iniciar_ejercicio(){               	
        set_time_limit(0);
        $sql = 'select * from apafa.iniciar_nuevo_ejercicio(%s,%s,\'%s\',%s);';
        $documentos = $this->DocumentoVenta->query(sprintf($sql,$this->empresaId(), $this->ejercicioId(),
                            $this->fechaTrabajo(), $this->usuarioId()));  
        $this->Session->setFlash(__('Se inicio el ejercicio correctamente', true));
        $this->redirect($this->homeUrl);
    }
    
    public function facturar_actividad($fecha, $actividad_codigo){
        set_time_limit(0);
        $this->loadModel('Actividade');
        $actividad = $this->Actividade->find('first', array(
                            'conditions'=>array(
                                'Actividade.codigo'=>$actividad_codigo,
                                'Actividade.activo'=>true)));
        $sql = 'select * from facturacion.generar_deuda_actividad(%s,%s, %s,%s,%s,\'%s\',%s);';
        $documentos = $this->DocumentoVenta->query(sprintf($sql,$this->empresaId(), 
                            $this->centroDistId(),$this->ejercicioId(), 
                            $this->periodoId(), $actividad['Actividade']['id'], $fecha, $this->usuarioId()));  
        $this->Session->setFlash(__('El proceso de facturación se realizo correctamente.', true));
        $this->redirect($this->homeUrl);
    }
        
}
?>